package com.bcq.bcqrpc.proxy;

import java.lang.reflect.Proxy;

/**
 * 服务代理工厂（用于创建代理对象）
 */
public class ServiceProxyFactory {

    /**
     * 根据服务类获取代理对象
     *  生成的代理对象是基于传入的服务接口 serviceClass 创建的，
     *  它实现了该接口的所有方法。
     *  当客户端调用代理对象的方法时，
     *  实际执行的是 ServiceProxy.invoke 方法。
     * @param serviceClass
     * @param <T>
     * @return
     */
    public static <T> T getProxy(Class<T> serviceClass) {
        return (T) Proxy.newProxyInstance(
                //获取服务类的类加载器。
                serviceClass.getClassLoader(),
                //指定代理对象实现的接口。
                new Class[]{serviceClass},
                //提供自定义的调用处理器。
                new ServiceProxy());
    }
}
